//
//  main.cpp
//  lesson03
//
//  Created by ryu on 2021/9/14.
//

#pragma once
#include <iostream>
using namespace std;
//template<class T>
//void mySwap(T* a,T* b){
//    T tmp = *a;
//    *a = *b;
//    *b = tmp;
//}





template<class NameType,class AgeType>
class Person{
    public:
    
    NameType name;
    AgeType age;
    
    Person(NameType name,AgeType age){
        this->name = name;
        this->age = age;
    }
    void showPerson()
    {
        cout << "name: " << this->name << " age: " << this->age << endl;
    }
};

void test01()
{
    // 指定NameType 为string类型，AgeType 为 int类型
    Person<string, int>P1("孙悟空", 999);
    P1.showPerson();
}

template<class T>
void mySwap(T& a, T& b)
{
    T temp = a;
//    &a = 12;
    a = b;
    b = temp;
}

template<class T>
void fun2(){
    cout<<"模版函数"<<endl;
}

void fun(){
    int a = 10;
    int b = 20;
    //swapInt(a, b);

    //利用模板实现交换
    //1、自动类型推导
    mySwap(a, b);

    //2、显示指定类型
//    mySwap<int>(a, b);

    cout << "a = " << a << endl;
    cout << "b = " << b << endl;
}

template<class T>
void my_swap(T a,T b){
    T c = a;
    a = b;
    cout<<"a:"<<a<<endl;
    b = c;
}

void int_swap(int& a,int& b){
//    my_swap(a, b);
//    char c = 'A';
//    my_swap<int>(a, c);
}

void test(){
//    Array<int> array1(new int[10],0);
//    array1.add(1);
//    array1.showInfo();
}
int main(int argc, const char * argv[]) {
    // insert code here...
//    std::cout << "Hello, World!\n";
//    fun();
//    fun2<int>();
    
//    int a = 10;
//    int b = 20;
//    int &c = a;
//    cout << "a = " << a << endl;
//    cout << "b = " << b << endl;
//
//    b = 100;
//
//    cout << "a = " << a << endl;
//    cout << "b = " << b << endl;
//    new Person<string, int>person("k",10);
    
//    Person<string, int>P1("孙悟空", 999);
//    P1.showPerson();
//
//    int a = 100,b = 200;
//    int_swap(a,b);
//    cout<<b<<endl;
    
    test();
    
    
    
    return 0;
}


